package monitora.dao;

import java.io.Serializable;
import java.util.List;

import monitora.bean.PrefeituraBean;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

public class PrefeituraDAO implements Serializable {
	
	public List<String> nomesPrefeituras() {
		try {
			SessionFactory sessionFactory = Sessao.getSessionFactory();
			Session session = sessionFactory.openSession();
			
			List<String> lista = session.createSQLQuery("SELECT * FROM MONITORA.GET_PREFEITURAS()")
									.list();
			
			session.close();
			
			if (lista != null && lista.size() > 0) {
				return lista;
			}
		} catch (Exception exception) {
			exception.printStackTrace();
		}
		
		return null;
	}
	
	public List<PrefeituraBean> getPrefeituras() {
		try {
			SessionFactory sessionFactory = Sessao.getSessionFactory();
			Session session = sessionFactory.openSession();
			
			List<PrefeituraBean> lista = session.getNamedQuery("prefeituras").list();
			
			session.close();
			
			if (lista != null && lista.size() > 0) {
				return lista;
			}
		} catch (Exception exception) {
			exception.printStackTrace();
		}
		return null;
	}
	
	public boolean loginValido(String nomePrefeitura, String cpf, String senha) {
		try {
			SessionFactory sessionFactory = Sessao.getSessionFactory();
			Session session = sessionFactory.openSession();
			
			List<Integer> lista = session.createSQLQuery("SELECT * FROM MONITORA.VALIDA_LOGIN(:PREFEITURA, :CPF, :SENHA)")
				.setParameter("PREFEITURA", nomePrefeitura)
				.setParameter("CPF", cpf)
				.setParameter("SENHA", senha)
				.list();
				
			if (lista != null && lista.size() > 0) {
				return lista.get(0) == 0 ? true : false;
			}
		} catch (Exception exception) {
			exception.printStackTrace();
		}
		return false;
	}
	
	public boolean alterarLogin(String nomePrefeitura, String cpf, String senha) {
		try {
			SessionFactory sessionFactory = Sessao.getSessionFactory();
			Session session = sessionFactory.openSession();
			Transaction transaction = session.beginTransaction();
			
			List<Integer> lista = session.createSQLQuery("SELECT * FROM MONITORA.ALTERAR_LOGIN(:PREFEITURA, :CPF, :SENHA)")
				.setParameter("PREFEITURA", nomePrefeitura)
				.setParameter("CPF", cpf)
				.setParameter("SENHA", senha)
				.list();
			
			transaction.commit();
			session.close();
			
			if (lista != null && lista.size() > 0) {
				return lista.get(0) == 0 ? true : false;
			}
		} catch (Exception exception) {
			exception.printStackTrace();
		}
		return false;
	}
	
	public int codigoPrefeitura(String nomePrefeitura) {
		try {
			SessionFactory sessionFactory = Sessao.getSessionFactory();
			Session session = sessionFactory.openSession();
			
			List<Integer> lista = session.createSQLQuery("SELECT * FROM MONITORA.GET_CODIGO(:PREFEITURA)")
				.setParameter("PREFEITURA", nomePrefeitura)
				.list();
				
			if (lista != null && lista.size() > 0) {
				return lista.get(0);
			}
		} catch (Exception exception) {
			exception.printStackTrace();
		}
		return -1;
	}
	
	public static void main(String[] args) {
		System.out.println(new PrefeituraDAO().nomesPrefeituras().toString());
	}
}
